﻿using System.Collections.Generic;
using NHibernate;
using Neturion.Dados;
using Neturion.IRepositorios;

namespace Neturion.Repositorios
{
    public class RepositorioLancamento : IRepositorioLancamento
    {
        public Lancamento Inserir(Lancamento lancamento)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Save(lancamento);
            return lancamento;
        }

        public Lancamento Atualizar(Lancamento lancamento)
        {
            Lancamento tmpLancamento = ObterPorId(lancamento.LancamentoId);
            // Atribuicao dos valores do objeto da memoria para o objeto obtido no banco de dados
            tmpLancamento.EnumTipoLancamento = lancamento.EnumTipoLancamento;
            tmpLancamento.Documento = lancamento.Documento;
            tmpLancamento.Pessoa = lancamento.Pessoa;
            tmpLancamento.Descricao = lancamento.Descricao;
            tmpLancamento.Historico = lancamento.Historico;
            tmpLancamento.Cheque = lancamento.Cheque;
            tmpLancamento.Valor = lancamento.Valor;
            tmpLancamento.ContaContabil = lancamento.ContaContabil;
            tmpLancamento.ContaBanco = lancamento.ContaBanco;
            tmpLancamento.DataEmissao = lancamento.DataEmissao.Date;

            GerenciadorBDConfigs.Instance.SessaoAtual().Update(tmpLancamento);
            return tmpLancamento;
        }

        public void Excluir(Lancamento lancamento)
        {
            GerenciadorBDConfigs.Instance.SessaoAtual().Delete(lancamento);
        }

        public IList<Lancamento> ObterTodos()
        {
            ICriteria criteria = GerenciadorBDConfigs.Instance.SessaoAtual().CreateCriteria(typeof(Lancamento));
            return criteria.List<Lancamento>() as List<Lancamento>;
        }

        public Lancamento ObterPorId(int id)
        {
            return GerenciadorBDConfigs.Instance.SessaoAtual().Get<Lancamento>(id);
        }
    }
}